This invention relates in general to systems for monitoring operation of software programs and in particular to a system for monitoring and documenting sequences of operations performed by object-oriented computer programming systems.
When computer processors were first developed, they were programmed directly in machine language and programs comprised sequences of binary encoded instructions indicating operations to be performed by a computer processor on a step-by-step basis. To facilitate programming, assembly languages were developed in which machine language instructions were represented by mnemonics and an assembly language program consisted of a collection of such mnemonics listed in the order that the instructions they represent were to be carried out. As higher level languages such as "Basic", "Fortran", "Pascal" and the like were developed, complex functions often requiring the processor to execute hundreds or even thousands of machine language instructions were represented by code comprising relatively few words, numbers and symbols more easily understood by humans than assembly language mnemonics. Yet even in these higher level languages, programs consist of code generally listed in the order in which the functions represented by the code are to be performed by the computer.
Such "sequential" languages are particularly useful for writing programs which cause a computer to carry out a predetermined sequence of operations. However computers are often utilized for modeling systems of interactive components in order to determine sequences of actions such systems would perform under various conditions. For example a programmer may wish to program a computer to mimic the manner in which some particular digital logic network responds to a particular input stimulus. When the programmer doesn't know beforehand what sequence of steps the logic network would carry out in response to the stimulus, but only how each individual component changes its outputs in response to a change to its inputs, the programmer often finds it difficult to utilize sequentially organized instructions to program a computer to model the behavior of the system.
In contrast to sequentially organized software, "object-oriented" software is organized into "objects", each comprising a block of computer instructions describing various procedures ("methods") to be performed in response to "messages" sent to the object. Such operations include, for example, the manipulation of variables and the transmission of one or more messages to other objects. Thus one "programs" in an object-oriented programming language by writing individual blocks of code each of which creates an object by defining its methods. A collection of such objects adapted to communicate with one another by means of messages comprises an object-oriented program. Object-oriented computer programming facilitates the modeling of interactive systems in that each component of the system can be modeled with an object, the behavior of each component being simulated by the methods of its corresponding object, and the interactions between components being simulated by messages transmitted between objects. Typically a user may stimulate an object through an image on a computer terminal representing the object, for example by utilizing a mouse to control a cursor on the screen to select the object, and by utilizing buttons on the mouse or a keyboard to transmit messages to the selected object. An object may also provide information to the user through its image on the screen by means of data displays or graphical changes to its image.
An operator may stimulate a collection of interrelated objects comprising an object-oriented program by sending a message to one of the objects. A method of the object receiving the message may cause the object to respond, carrying out predetermined functions which may include sending messages to one or more other objects. The other objects may in turn carry out additional functions in response to the messages they receive, including sending still more messages. In such manner sequences of message and response may continue indefinitely or may come to an end when all messages have been responded to and no new messages are being sent. When modeling systems utilizing an object-oriented language, a programmer need only think in terms of how each component of a modeled system responds to a stimulus and not in terms of the sequence of operations to be performed in response to some stimulus. Such sequence of operations naturally flows out of the interactions between the objects in response to the stimulus and need not be preordained by the programmer.
Although object-oriented programming makes simulation of systems of interrelated components more intuitive, the operation of an object-oriented program is often difficult to understand because the sequence of operations carried out by an object-oriented program is usually not immediately apparent from a software listing as in the case for sequentially organized programs. Nor is it easy to determine how an object-oriented program works through observation of the readily apparent manifestations of its operation. Most of the operations carried out by a computer in response to a program are "invisible" to an observer since only a relatively few steps in a program typically produce a change in an image on a screen or some other observable computer output. Some object-oriented programming systems include a "debugger" permitting a programmer to interrupt program operation at any point, to inspect the states of variables controlled by each object, and to review and change the methods associated with objects in the system. Some debuggers also provide a listing (a "message stack") of the messages which have been sent, but for which a response has not yet been completed. While such debuggers are useful, it is nonetheless difficult for a programmer to comprehend the sequence of actions performed with an object-oriented program, simply by interrupting a program and reviewing the message stack or current state of variables maintained via the objects involved.